Linux 系统下构建 Qt 您所在的位置:网站首页 qt 后端 Linux 系统下构建 Qt

Linux 系统下构建 Qt

2023-04-14 07:16| 来源: 网络整理| 查看: 265

我们假定如下条件:

需要构建的是 Qt 5.9.9 版本。 系统使用 apt 软件包管理器。 如果对文中的一些内容有疑惑,可尝试查看文末的附加信息。 安装 C/C++ 编译环境 (如果已安装请跳过):

执行 sudo apt-get install build-essential 即可完成 C/C++ 编译环境的安装。

如果不存在 build-essential 软件包,那么我们需要自行安装 gcc、g++ 编译器等内容。

确保以下 Qt 所依赖的软件包都已安装: libfontconfig1-dev (如果未安装将导致 Qt 找不到字体,进而出现中文不显示问题) libfreetype6-dev (字体引擎,提供统一的接口来访问多种格式的字体文件) libx11-dev (X11 开发包) libxext-dev (X11 杂项扩展库) libxfixes-dev (X11 杂项 “修复” 扩展库) libxi-dev (为 X 协议的 XINPUT 提供扩展接口) libxrender-dev (X 渲染扩展库) libxcb1-dev (Xlib 的替代实现) libx11-xcb-dev (Xlib 和 XCB 的混合接口库) libxcb-glx0-dev (XCB 的 GLX 扩展库)

根据以往经验,我们还应该确保安装以下软件包:

pkg-config (确保 configure 能够使用 pkg-config 查找依赖库信息) libxkbcommon-dev (Qtfcitx 模块的依赖项) libxkbcommon-x11-dev (Qt 内部会将其与 xcb 结合使用,如果不想安装可选择使用 -qt-xkbcommon-x11 选项替代 (未验证))

如果不使用 -qt-xcb 编译选项,还应该确保安装以下软件包(通常我们都使用 -qt-xcb 选项):

libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev

其它根据情况推荐安装的模块:

libgl1-mesa-dev (Qt OpenGL 的依赖项) libdbus-1-dev (QtDBus 模块的依赖项) libgstreamer*‑dev (QtMultimedia 模块的后端依赖项) 构建 openssl 库 (如果不需要 openssl 支持或已安装对应版本的 openssl 库,可跳过):

openssl 库的二进制兼容性很差,放到 Qt 上更是如此。

一旦 Qt 没有加载到兼容版本的 openssl 库将会出现 "建立网络连接时卡死"、"程序退出时崩溃" 的情况。

因此我们选择自行构建对应版本的 openssl 库,并在软件发布时自包含 openssl 库。

从 Qt 5.9 Tools and Versions 页面的 Tools & Versions 一节,我们可以了解到官方发布 Qt5.9 时所使用的 openssl 版本为 1.0.2。 因此我们下载 openssl-1.0.2 的源码进行构建。 下载并解压后,进入源码目录下使用如下步骤完成构建:

./config shared -prefix=/usr/local/ssl make -j4 sudo make install # -prefix 指定 openssl 的安装目录,可根据需要自行修改 构建 Qt:

我们可以从 这里 下载到 Qt 的源码。 下载完成后,使用如下步骤完成构建:

mkdir -p ~/build/qt cd ~/build/qt # 将 Qt 源码放至当前目录 ... # 解压源码 tar -xJvf qt-everywhere-opensource-src-5.9.9.tar.xz # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # 注意: # Qt 5.11.1 之前的版本采用 shadow build 方式进行构建时会出现 # Qt*Config.cmake 文件不包含私有头文件引入的问题,因此在进行构 # 建前需要合并 bug 补丁: # https://codereview.qt-project.org/c/qt/qtbase/+/227458 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! mkdir ~/build/qt/build cd ~/build/qt/build # 执行 configure,以下选项针对 Qt5.9.9 编写,一些内容可能并不适用,请根据情况进行修改。 ~/build/qt/qt-everywhere-opensource-src-5.9.9/configure \ -opensource -confirm-license \ (使用开源许可协议构建 Qt,自动确认 license 提示) -prefix /usr/lib/aarch64-linux-gnu/qt5.9.9 \ (指定 Qt 的安装目录,可根据需要自行指定) -recheck \ (要求 configure 每次执行都进行检测) -qt-xcb \ (使用 Qt 自带的一些 xcb 组件库,减少 Qt 对系统 xcb 组件库的依赖) -qt-zlib -qt-libjpeg -qt-libpng \ (使用 Qt 自带的 jpeg、png 库) -fontconfig \ (指明启用 fontconfig 支持) -openssl \ (指明启用 openssl 支持) -I /usr/local/ssl/include \ (将我们自己构建的 openssl 库添加至包含路径,防止 Qt 引入其它版本的库进行编译) -opengl -sql-sqlite \ (指明启用 opengl、sqlite 支持) -no-gtk \ (禁用 gtk 主题样式) -nomake tests -nomake examples \ (跳过这些无关紧要模块的构建)

以下是我们选择不构建的 Qt 组件模块,可根据需要自行调整:

-skip qtactiveqt -skip qt3d -skip qtandroidextras -skip qtconnectivity -skip qtcanvas3d \ -skip qtgamepad -skip qtlocation -skip qtpurchasing -skip qtsensors \ -skip qtserialbus -skip qtserialport -skip qtnetworkauth -skip qtspeech -skip qtremoteobjects \ -skip qtdatavis3d -skip qtdeclarative -skip qtwebengine

如果不需要 QML 相关功能可指定这些:

-skip qtquickcontrols -skip qtquickcontrols2 -skip qtscript -skip qtgraphicaleffects

如果不需要 QtDataVisualization 功能模块可指定:

-skip qtdatavis3d

-skip 可取的值为 Qt 源码目录下的那些顶级目录(如 qtconnectivity)。 请注意,一个顶级目录下可能包含多个 Qt 功能模块。(可通过其 src 子目录下的目录划分看出其所包含的功能模块) 目前暂没有找到好的方法单独 skip Qt 功能模块的构建。

等待 configure 执行完毕,并检查其输出信息没有问题后,我们就可以进行 Qt 的编译和安装了:

make sudo make install 构建 Fcitx 输入法支持:

如果系统使用的是 Fcitx 输入法,那么 Qt 程序将会出现无法使用输入法的情况,这是因为Qt 本身不支持 Fcitx 输入法,因此我们需要自行构建 fcitx-qt5 插件以为其添加支持。

具体的构建过程可以参阅博主 flfihpv259 的博文: QT5.6.0无法切换fcitx中文输入法问题记录 在此不再赘述,仅多提及几点:

下载 fcitx-qt5 源码时通常选择其最新稳定版的 tag。(对于其它开源软件来说也是如此)

ECM 软件包全称为 Extra CMake Modules,其通常有现成的软件包 extra-cmake-modules 可供安装。

XKBCommon 通常有现成的软件包 libxkbcommon-dev 可供安装。

如果出现找不到 Qt*Config.cmake 文件错误,可在执行 cmake 时指定 CMAKE_PREFIX_PATH 来添加包含路径:

cmake -DCMAKE_PREFIX_PATH=/usr/lib/aarch64-linux-gnu/qt5.9.9/lib/cmake ..

如果系统上已经安装了其它版本的 Qt ,那么有可能找到错误版本的 Qt*Config.cmake 文件,这也可以通过指定 CMAKE_PREFIX_PATH 来解决。

如果出现 Parse error at "IID" 错误,这是由于找不到 Qt 私有头文件导致的,请确保构建 Qt 时应用了 227458 补丁。

至此我们已完成 Qt 的完整构建,以下是一些可能对你有帮助的附加信息:

可参见对应 Qt 版本的 Qt for X11 Requirements 页面查阅 Qt 对外部库的基本依赖情况。

可通过 Building Qt for Linux/es 页面详细了解 Qt 对外部库的详细依赖情况(只不过有点旧了)。

可参见 Qt Configure Options 页面了解 configure 的使用说明。

如果你是商业版的用户,或许你可以直接使用 Qt Configuration Tool 来构建 Qt。

合并 227458 补丁的方法:

qtbase/mkspecs/features/create_cmake.prf 在不同版本之间可能有差异,但大体上只需要确保删除文件中对于 CMAKE_NO_PRIVATE_INCLUDES 的定义和访问代码即可。

通过 apt list --installed 命令可查看已安装的软件包列表。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有